/**
 * 单位工具
 * 提供常见纸张尺寸的定义和单位转换功能
 */

/**
 * 获取当前设备的DPI值
 * @returns 当前设备的DPI值
 */
export function getCurrentDeviceDPI(): number {
  // 创建一个1英寸的div元素来测量DPI
  const div = document.createElement('div');
  div.style.width = '1in';
  div.style.height = '1in';
  div.style.position = 'absolute';
  div.style.left = '-100%';
  div.style.top = '-100%';
  document.body.appendChild(div);

  // 获取这个1英寸元素的实际像素宽度，即为DPI
  const dpi = div.offsetWidth;

  // 移除测试元素
  document.body.removeChild(div);

  return dpi || 96;
}

// 常见纸张尺寸定义（动态计算为像素单位）
export const paperSizes: { [key: string]: () => { width: number; height: number, scaleSize: number } } = {
  'A4': () => { return { width: mmToPx(210), height: mmToPx(297), scaleSize: 0.8 } },      // A4纸张尺寸
  'A5': () => { return { width: mmToPx(148), height: mmToPx(210), scaleSize: 1 }; },      // A5纸张尺寸
  'B5': () => { return { width: mmToPx(176), height: mmToPx(250), scaleSize: 1 }; },      // B5纸张尺寸
  '6寸': () => { return { width: mmToPx(102), height: mmToPx(152), scaleSize: 1 }; },     // 6寸纸张尺寸
  'Letter': () => { return { width: mmToPx(216), height: mmToPx(279), scaleSize: 0.8 }; },  // 8.5" × 11"
  'Legal': () => { return { width: mmToPx(216), height: mmToPx(356), scaleSize: 0.8 }; },   // 8.5" × 14"
  '自定义': () => { return { width: 0, height: 0, scaleSize: 1 }; }       // 自定义尺寸
}

/**
 * 毫米转像素（使用当前设备DPI）
 * @param mm 毫米值
 * @returns 像素值
 */
export function mmToPx(mm: number): number {
  // 1英寸 = 25.4毫米，1英寸 = dpi像素
  const dpi = getCurrentDeviceDPI();
  return Math.round((mm / 25.4) * dpi)
}